Entiendo que cuando vuelves a cargar una pestaña, el trabajador del servicio de espera no se activará porque la pestaña anterior y la pestaña nueva se superponen.
Pero me pregunto si hay una manera de implementarlo retrasando el cierre de la pestaña anterior o la apertura de la nueva pestaña, de modo que podamos omitir la espera y activar el trabajador del servicio de espera.
Intenté esto:
const wb = new Workbox("service-worker.js"); wb.addEventListener("waiting", () => { window.addEventListener('beforeunload', async () => { await wb.messageSkipWaiting(); }); });Y activa el trabajador del servicio en espera en la recarga, pero la recarga a veces se cuelga para siempre, porque hay una condición de carrera en la que la recarga necesita obtener index.html y activos del trabajador del servicio, mientras que la activación del trabajador del servicio podría interrumpir la solicitud. Por ejemplo, si el antiguo SW estaba manejando la solicitud y de repente se reemplaza por el nuevo SW, la solicitud podría bloquearse.
No estoy seguro de si hay una mejor para manejar esto.